package com.chance.platform.service;

import com.chance.platform.mode.UserInfoData;
import com.chance.platform.mode.NeighborInfo;
import com.chance.platform.mode.UserRegisterInfo;
import com.chance.platform.mode.CLocation;
import com.chance.platform.mode.ReturnState;
import com.chance.platform.mode.SimpleNameValuePair;


interface CCIService
{
   /*
     * 消息收发接口类
   * */
   /*
	 * 一对一UDP消息发送接口，注意在不同手机上，Chance平台上同一个应用程序的selfAppID都是相同的
	 * */
	boolean CCISendMSG(in String UID, in String msg, int selfAppID);

	/*
	 * 一对多UDP消息发送接口
	 * */
	boolean CCIBrocastMSG(in String msg, int selfAppID);

	/*
	 * 一对一TCP消息发送接口
	 * */
	boolean CCITcpSendMSG(in String UID, in String msg, int selfAppID);

	/*
	 * 一对多TCP消息发送接口
	 * */
    //boolean CCITcpMultiSendMSG(in List<String> uidList, in String msg, int selfAppID);

    /*
     * 接收一对一的消息接口
     * */
    //String CCIRecvMSG();

    /*
     * 接收一对多的消息接口
     * */
    //String CCIRecvBrocastMSG();


    /*
    * 服务器转发在线/离线消息接口类
    **/
    /*
    * 在线消息发送接口
    * @param recvCID:接收者UID, msgData:数据内容, msgLen:内容长度
    * @return boolean: true:发送成功，false:发送失败
    **/
    boolean CCISendOnlineMsg(int recvCID, in byte[] msgData, int msgLen);

    /*
    * 离线消息发送接口
    * @param recvCID:接收者UID, msgData:数据内容, msgLen:内容长度
    * @return boolean: true:发送成功，false:发送失败
    **/
    boolean CCISendOfflineMsg(int recvCID, in byte[] msgData, int msgLen);

    /*
	 * 文件收发接口类
 	* */
 	/*
	 * 一对一，单个文件的发送接口
	 * */
	boolean CCISendFile(in String filePath, in String UID, int selfAppID, int msgType, in String descMsg);

	/*
	 * 一对多，单个文件的发送接口
	 * */
	void CCIMultiSendFile(in String filePath, in List<String> uidList, int selfAppID, int msgType, in String descMsg);

	/*
	 * 接收一对的文件接口
	 * @return 文件路径
	 * */
	//String CCIRecvFile();

	/*
	 * 接收一对多的文件接口
	 * @return 文件路径
	 * */
	//String CCIMultiRecvFile();

	/*
	 * 向指定方请求文件
	 * @return 接收到的文件存放路径,出错时返回null
	 * */
	String CCIRequestFile(in String filePath, in String UID, in String savePath, int selfAppID);

	/*
 	* 目录收发接口类
 	* */
 	/*
	 * 一对一，文件夹发送
	 * */
	boolean CCISendDir(in String dirPath, in String UID, int selfAppID);

	/*
	 * 一对多，文件夹的发送
	 * */
	//void CCIMultiSendDir(in String dirPath, in List<String> uidList, int selfAppID);

	/*
	 * 接收一对一的文件夹
	 * @return 文件夹路径
	 * */
	//String CCIRecvDir();

	/*
	 * 接收一对多的文件夹
	 * @return 文件夹的路径
	 * */
	//String CCIMultiRecvDir();

	/*
	 * 向指定方请求文件夹
	 * @return 接收到的文件存放路径,出错时返回null
	 * */
	String CCIRequestDir(in String targetPath, in String savePath, in String UID, int selfAppID);

	/*
	 * 向指定方以UDP多播方式发送文件
	 * */
	boolean CCIUDPSendFile(in String filePath, in String UID, int selfAppID);


	/*
 	* 个人资料操作接口类
 	* */
 	/*
	 * 判断是否允许应用程序读取个人资料的接口
	 * */
	boolean CCICouldAppReadSelfInfoData();

	/*
	 * 获取个人公开资料接口
	 * */
	NeighborInfo CCIGetUserInfo(in String UID);

	/*
	* 获取他人公开资料请求接口
	* @param UID:对方ID号
	* @return boolean true:请求发送成功，false:失败
	**/
	boolean CCIGetOtherUserInfo(in String UID);

	/*
	* 修改自己个人资料接口
	**/
	boolean CCIModifySelfInfo(in String UID, in UserInfoData info);

  /*
	* 增加自己个人资料接口（只调用一次）
	**/
	boolean CCIAddSelfInfo(in UserInfoData info);

	/*
	* 设置个人资料查看权限
	* @param : true 允许应用程序读取，false 不允许应用程序读取
	* @return: true 设置成功，false 设置失败
	**/
	boolean CCISetCouldAppReadSelfInfo(boolean couldRead);

	/*
 	* 邻居信息列表送接口类
	* */
	/*
	 * 得到自己的邻居表，包括ID,IP
	 * */
	List<NeighborInfo> CCIGetNebInfo();

	void CCIStartScanNeighbor();
	void CCIStopScanNeighbor();
	CLocation  CCIGetLocation();
	List<NeighborInfo> CCIGetLBSNeighborInfo(in CLocation location,int page);

	/*
 	* 好友信息获取接口类
 	* */
 	/*
	 * 判断是否允许应用程序读取好友列表
	 * */
	boolean CCICouldAppReadFriendList();

	/*
	 * 得到自己的好友列表，包括ID
	 * */
	List<NeighborInfo> CCIGetFriInfo(int type);

	/*
	* 设置好友列表查看权限
	* @param: true:允许应用程序查看好友列表，false：不允许应用程序查看好友列表
	* @return: true:设置成功， false:设置失败
	**/
	boolean CCISetCouldAppReadFriendList(boolean isCould);

	/**
	* 添加好友接口
	* @param: UID 好友ID号
	*/
	void CCIAddFriend(int UID);

	/**
	* 删除好友接口
	* @param: UID 好友ID号
	*/
	void CCIRmFriend(int UID);

	/**
	* 确认是否加同意好友接口
	* @param uid:是否同意的对象，isAgree:是否同意。0为不同意，1为同意
	**/
	void CCINoticeFriend(int UID, byte isAgree);

	/*
	 * 关注(暗恋)表操作接口类
	**/
	/*
	* 加关注接口,发个消息给服务器，并在自己数据库加一条关注记录，注意有关注数限制
	* @param actionType: 1代表关注，0代表暗恋
	**/
	boolean CCIAddAttentionOrLove(in String targetUID, int actionType);

	/*
	* 删关注接口,发个消息给服务器，并在自己数据库减一条关注记录
	* @param actionType: 1代表关注，0代表暗恋
	**/
	boolean CCIRmAttentionOrLove(in String targetUID, int actionType);


	/*
	* 标记表操作接口类
	**/
	/*
	* 加标记接口，发个消息给服务器，并在自己数据库加一条标记记录
	* @param targetUID:标记对象
	**/
	boolean CCIAddMark(in String targetUID);

	/*
	* 删标记接口，发个消息给服务器，并在自己数据库删除一条标记记录
	* @param targetUID:标记对象
	**/
	boolean CCIRmMark(in String targetUID);

	/*
 	* 数据库操作接口类
 	* */
 	/*
	 * 在本地数据库建表接口
	 * (原数据库存在一个表，每调用一次这个函数，就会往这个表里面加一条记录，应用ID与表名的映射)
	 * @param crtString 要执行的建表语句
	 * */
	//boolean CCICreateTable(in String crtString);

	/*
	 * 本地数据库查询接口，这里面要判断待查询的表是否属于自己，若不属于则出错返回
	 * @param qurString 要执行的查询语句
	 * */
	//List<String> CCIQueryTable(in String qurString);


	/*
 	* 系统相关接口类
 	* */
 	/*
 	* 软件注册，用于验证这个APP是否是经过Chance认证的
 	* @param AppID 平台上应用程序编号
 	* @return True 注册（认证）成功，False 注册（认证）失败
 	**/
 	boolean CCIRegisterSoft(int AppID);

 	/*
	 * 从服务器获取时间
	 * @return 返回系统时间
	 * */
	String CCIGetSysTime();

	/*
	 * 通过基站定位
	 * @return 返回地理位置
	 * */
	String CCIGetGeoPosition(in String locType);

	/*
	* 获取地图位置
	* @return 地图上的具体位置
	**/
	String CCIGetLocMapAddress();

	/*
	 * 获取自身的AppID
	 * @param AppName 应用程序名称
	 * @return 平台上该程序ID号
	 * */
	int CCIGetSelfAppID(in String AppName);

	/*
	 * 应用程序向chance平台注册自己的进程ID号，应用每次启动都需要进行操作
	 * @param pid 应用程序进程号。
	 * */
	//boolean CCIRegisterID(in String pid, String AppID);

	/*
	 * 应用程序chance平台 注销自己的进程ID号，应用程序在退出时都需要进行此操作
	 * */
	//boolean CCIUnRegisterID(in String pid, String AppID);



   	/*
 	* 软件应用接口类
 	* */
 	/*
	 * 查询指定用户已安装软件接口
	 * @return 软件编号列表
	 * */
	List<String> CCIGetSigUserInstallSoftList(in String UID);

	/*
	 * 查询指定用户正在玩的软件接口
	 * @return 软件编号列表
	 * */
	List<String> CCIGetSigUserPlaySoftList(in String UID);

	/*
	 * 查询自己邻居已安装的软件接口(所有邻居)
	 * @return 软件编号列表
	 * */
	List<String> CCIGetNeiInstallSoftList();

	/*
	 * 查询自己邻居正在玩的软件接口（所有邻居）
	 * @return 软件编号列表
	 * */
	List<String> CCIGetNeiPlaySoftList();

	/*
	* 查询指定邻居已安装的软件接口
	* @return 软件编号列表
	**/
	List<String> CCIGetSigNeiInstallSoftList(in String UID);

	/*
	* 查看服务器软件接口
	* @return 软件编号列表
	**/
	List<String> CCIGetChanceServerSoftList();

	/*
	* 从服务器查询自己安装软件是否有更新
	* @param UID 自己的UID
	* @return 更新信息列表
	**/
	List<String> CCIGetUpdateInfoFromServer(in String UID);

	/*
	* 从周边邻居查询自己安装软件是否有更新
	* @param UID 自己的UID
	* @return 更新信息列表
	**/
	List<String> CCIGetUpdateInfoFromNeibors(in String UID);

	/*
	* 查询指定邻居正在玩的软件接口
	* @return 软件编号列表
	**/
	List<String> CCIGetSigNeiPlaySoftList(in String UID);

	/*
	 * 查询安装指定软件的邻居接口
	 * @param 软件名称
	 * @return 邻居ID列表
	 * */
	//List<String> CCIGetInstallSoftNeibor(in String softName);

	/*
	 * 从任意已安装此软件的用户结点下载并安装接口
	 * @param AppID 软件编号
	 * */
	boolean CCIDownAndInstallSoft(int AppID);

	/*
	 * 向指定用户发送邀请安装应用
	 * @param softName 应用名称， userID 用户ID
	 * */
	//boolean CCIInviteUserInstallSoft(in String softName, in String UID);


    /*
	* 从平台上安装一指定软件
	* @param AppID 软件编号
	**/
	boolean CCIInstallSoft(int AppID);

	/*
	* 从平台上删除一指定软件
	* @param AppID 软件编号
	**/
	boolean CCIUninstallSoft(int AppID);

	/*
	* 从平台上启动一指定软件
	* @param AppID 软件编号
	**/
	boolean CCIStartSoft(int AppID);

		/*
	* 从平台上关闭一指定软件
	* @param AppID 软件编号
	**/
	boolean CCIStopSoft(int AppID);

	/*
	* 注册/登录/登出，与服务器相关通信
	**/
	/*
	* 用户注册ID号
	* @param UserRegisterInfo 用户注册信息（包含：手机号，MAC地址，注册密码，邮箱）
	* @return int:系统分配的UID
	**/
	int CCIUserRegister(in UserRegisterInfo uri);

	/*
	* 用户登录
	* @param UID 用户ID, bluetoothMac 蓝牙Mac, psw 登录密码
	* @return int(1:成功，2：密码错误，3：用户不存在，4：未知错误，5：Mac地址错误)
	**/
	int CCIUserLogin(int UID, in String bluetoothMac, in String psw);

	/*
	* 用户登出
	* @return boolean
	**/
	boolean CCIUserLogout();

	/*
	* 用户申诉
	* @Param UID:用户ID,bluetoothMac：蓝牙mac,pwd：用户密码
	* @return int 1:申诉成功， 2：MAC未绑定，3：用户不存在，4：密码错误，5：无需绑定，6：未知错误，-1：默认值
	*/
	int CCIUserAppeal(int UID, in String bluetoothMac, in String pwd);

	/*
	* 普通表记录字段更新
	* @Param tableName:表名 recordNum:记录条数, data:具体记录数据
	* @return boolean: true:更新成功，false:更新失败
	**/
	boolean CCIUpdateTableRecordToServer(in String tableName, int recordNum, in byte[] data);

	/*
	* 普通表记录上传
	* @Param tableName:表名 recordNum:记录条数, data:具体记录数据
	* @return boolean: true:上传成功，false:上传失败
	**/
	boolean CCIUploadTableRecordToServer(in String tableName, int recordNum, in byte[] data);

	/*
	* 日志/日志评论上传
	* @Param tableName:表名 diaryRecordNum:记录条数, data:具体记录数据
	* @return boolean: true:上传成功，false:上传失败
	**/
	boolean CCIUploadDiaryToServer(in String tableName, int diaryRecordNum, in byte[] data);

	/*
	* 自身的日志下载
	* @param diaryID：日志ID, offset:从哪条开始，total:具体记录条数
	* @return boolean: true:下载请求上传成功，false:下载请求上传失败
	**/
	//boolean CCIDownSelfDiaryRequest(int diaryID, int offset, int total);

	/*
	* 他人的日志下载
	* @param cid为具体某个人，offset:从哪条开始，total:具体记录条数
	* @return boolean: true:下载请求上传成功，false:下载请求上传失败
	**/
	boolean CCIDownOtherDiaryRequest(int cid, int offset, int total);

	/*
	* 日志推送请求
	* @param cid:自己的CID， offset:从哪条开始，total：具体记录条数
	* @return boolean: true:下载请求上传成功，false:下载请求上传失败
	**/
	boolean CCIPushDiaryRequest(int cid, int offset, int total);

	/*
	* 日志赞
	* @param destCID具体某个人，diaryID:日志ID
	* @return boolean:true:赞请求上传成功，false:上传失败
	*/
	boolean CCIDiaryPraiseRequest(int destCID, int diaryID);


	/*
	* 关注暗恋表上传
	* @param tableName:表名，number:记录条数，data:具体记录数据
	* @return boolean: true:上传成功，false:上传失败
	**/
	boolean CCIUploadLoveAndAttentionToServer(in String tableName, byte number, in byte[] data);

	/*
	* 用户详细信息表上传
	* @return boolean: true:上传成功，false:上传失败
	**/
	boolean CCIUploadUserInfoToServer();

	/*
	* 数据库操作接口
	**/
	/*
	* 创建以AppID为前缀的数据库。
	* @param dbName 数据库名称
	**/
  //void CCICreateDatabase(in String dbName, int AppID);

  /*
	* 关闭以AppID为前缀的数据库。
	* @param dbName 数据库名称
	**/
  //void CCICloseDatabase(in String dbName, int AppID);

  /*
	* 删除以AppID为前缀的数据库。
	* @param dbName 数据库名称
	**/
  //void CCIDeleteDatabase(in String dbName, int AppID);

	/*
	* 在AppID为前缀的dbName数据库中建表。
	* @param dbName 数据库名称, execString 建表语句
	**/
  //boolean CCICreateTable(in String dbName, int AppID, in String execString);

  /*
	* 在AppID为前缀的dbName数据库中删表。
	* @param dbName 数据库名称, tableName 待删除的表名
	**/
  //boolean CCIDeleteTable(in String dbName, int AppID, in String tableName);

	/*
	* 在AppID为前缀的dbName数据库表中插入记录。
	* @param dbName 数据库名称, execString 插入语句
	**/
  //boolean CCIInsertItem(in String dbName, int AppID, in String execString);
  /*
	* 在数据库表中插入单条记录。
	* @param execString 插入语句
	**/
  //boolean CCIInsertItem(int AppID, in String execString);

   /*
	* 在数据库表中插入若干条记录。
	* @param execList 插入语句列表
	**/
  //boolean CCIInsertItems(int AppID, in List<String> execList);

  /*
  * 在AppID为前缀的dbName数据库表中查询记录
  * @param dbName 数据库名称, execString 查询语句
  **/
  //List<String> CCIQueryItems(in String dbName, int AppID, in String execString);

   /*
  * 在数据库表中查询记录
  * @param execString 查询语句
  **/
  //List<String> CCIQueryItems(int AppID, in String execString);

  /*
  * 在AppID为前缀的dbName数据库表中更新记录
  * @param dbName 数据库名称, execString 更新语句
  **/
  //boolean CCIUpdateItem(in String dbName, int AppID, in String execString);

  /*
  * 在数据库表中更新记录
  * @param execString 更新语句
  **/
  //boolean CCIUpdateItem(int AppID, in String execString);

  /*
  * 在AppID为前缀的dbName数据库表中删除记录
  * @param dbName 数据库名称, execString 删除语句
  **/
  //boolean CCIDeleteItems(in String dbName, int AppID, in String execString);

   /*
  * 在数据库表中删除记录
  * @execString 删除语句
  **/
  //boolean CCIDeleteItems(int AppID, in String execString);


   /**
   * 网络状态检查接口
   */
   /**
   * 检测是否存在网络
   */
   boolean CCIisNetworkAvailable();

   /**
   * 检测网络状态，是连接wifi还是3G或2G
   * @return MOBILE_NETWORK_WIFI, MOBILE_NETWORK_3G_2G, MOBILE_NETWORK_UNCONNECTED
   */
   int CCICheckNetworkState();

   /*
   * 检测与服务器的连接状态
   * @return boolean, true:与服务器连接，false:与服务器断开连接
   */
   boolean CCIisKeepConnectWithMainServer();

   /*
   * 声音定位接口
   */
   /*
   * 发送声音定位启动请求接口
   * @return boolean, true:发送成功，false:发送失败
   */
   boolean CCISoundLocStart(in List<String> uidList);

   /*
   * 发送声音定位停止请求接口
   * @return boolean, true:发送成功，false:发送失败
   */
   boolean CCISoundLocStop(in List<String> uidList);

   /*
   * 启动准备好后的状态返回回复请求接口
   * @return boolean, true:发送成功，false:发送失败
   **/
   boolean CCISoundLocStartReady(int targetUID);

   /*
   * 客户端数据结果返回回复请求接口
   * @return boolean, true:发送成功，false:发送失败
   **/
   boolean CCISoundLocStopResult(int targetUID ,float radioStrength);

    /*
    * 与图片服务器通信接口
    **/
   	/**
	 * 上传单个文件(传图片/音视频)与图片服务器通信函数
	 * @param url Servlet的地址
	 * @param nameValuePair 上传的文件路径
	 * @return 返回执行状态 若ReturnState.getCode() == 0 表示上传成功
	 */
	 ReturnState CCItransFileToFastDFS(in String url, in SimpleNameValuePair nameValuePair);

	 /**
	 * 上传文件列表(传图片/音视频)与图片服务器通信函数
	 * @param url Servlet的地址
	 * @param nameValuePairs 上传的文件集合 <file,/sdcard/test.txt>
	 * @return 返回执行状态 若ReturnState.getCode() == 0 表示上传成功
	 */
     List<ReturnState> CCItransFileListToFastDFS(in String url, in List<SimpleNameValuePair> nameValuePairs);

     /**
	 * 删除单个文件,与图片服务器通信函数
	 * @param url Servlet的地址
	 * @param nameValuePairs 删除的文件 <filename,groux/M00/00/00/...........>
	 * @return 返回执行状态 若ReturnState.getCode() == 0 表示删除成功
	 */
	 ReturnState CCIdeleteFileForFastDFS(in String url, in SimpleNameValuePair nameValuePair);

	 /**
	 * 删除文件列表,与图片服务器通信函数
	 * @param url Servlet的地址
	 * @param nameValuePairs 删除的文件集合 <filename,groux/M00/00/00/...........>
	 * @return 返回执行状态 若ReturnState.getCode() == 0 表示删除成功
	 */
     List<ReturnState> CCIdeleteFileListForFastDFS(in String url, in List<SimpleNameValuePair> nameValuePairs);

     /**
	 * 下载单个文件,与图片服务器通信函数
	 * @param url Servlet的地址
	 * @param fileurl 下载的文件URL ,
	 * @param LocaldirPath 保存的目录, fileName：文件名
	 * @return 返回执行状态 若ReturnState.getCode() == 0 表示下载成功
	 */
	 ReturnState CCIrecvFileFromFastDFS(in String url, in String fileurl, in String LocaldirPath, in String fileName);

     /*
     * 获取本地图片路径列表函数，有图片就填充，没图片就去图片服务器获取。
     * @param urlList:需要获取的图片的URL列表, dirPath:图片存储目录
     * @return Map<String, String>,即URL与本地图片路径的映射。
     **/
     Map CCIGetMultiLocalFilePathMap(in List<String> urlList, String dirPath);

     /*
     * 获取单个本地图片路径函数，有图片就填充，没图片就去图片服务器获取。
     * @param url:需要获取的图片的URL, dirPath:图片存储目录
     * @return Map<String, String>,即URL与本地图片路径的映射。
     **/
     Map CCIGetSigLocalFilePathMap(in String url, String dirPath);

    /*
 	* 视觉分享操作接口类
 	* */
 	/*
	 * 注册应用软件编号接口
	 * */
	void CCIVSRegister(in String softID);

	/*
	 * 设置自身共享的好友，邻居接口
	 * */
	void CCIVSSet();

	/*
	 * 通知 相应的用户有共享的请求到达接口，接口内部实现时，应有几秒的休眠，为了等待用户查看消息和同意同享。
	 * @param userID：用户ID
	 * */
	void CCIVSNotify(in String userID);

	/*
	 * 启动相应软件（进程），主动连接分享服务端，里面加一个超时（5分钟）
	 * @param DestIP：共享者IP
	 * */
	void CCIHandleAgrShare(in String DestIP);

	/*
	 * 进行分享
	 * @param  idList:参与分享用户ID列表，file：分享的文件
	 * @返回分享的ID号
	 * */
	String CCIVSBeginShare(in List<String> idList, in String filePath);

	/*
	 * 针对某个分享进行评论
	 * @param sessionID:分享ID号, Commit:评论
	 * */
	boolean CCIVSComment(in String sessionID, in String commit);

	/*
	 * 终于某个分享
	 * @param sessionID:某个分享ID
	 * */
	boolean CCISStop(in String sessionID);

}